package bancosys.tec.rtm.diagnostician;

import java.io.OutputStream;
import java.util.List;

import bancosys.tec.rtm.diagnostician.report.DiagnosticianReportGenerator;

/**
 * Interface que determina o comportamento de um case de diagnosticadores. Ela vem facilitar e determinar o comportamento das classes que
 * encapsulam os diagnosticadores que devem ser executados pelos sistemas.
 * 
 * @author Evaristo
 * @version $Id:$ <b>Created on: </b> 05/03/2007
 */
public interface DiagnosticianCase {

    /**
     * Executa os diagnosticadores do sistema.
     * 
     * @param reportGenerator DiagnosticianReportGenerator
     * @param outputStream OutputStream
     * @throws Exception - Qualquer erro decorrente da execução dos diagnosticadores
     */
    void executeDiagnostician(DiagnosticianReportGenerator reportGenerator, OutputStream outputStream) throws Exception;

    /**
     * Executa os diagnosticadores do sistema em modo debug.
     * 
     * @param reportGenerator DiagnosticianReportGenerator
     * @param outputStream OutputStream
     * @throws Exception - Qualquer erro decorrente da execução dos diagnosticadores
     */
    void executeDiagnosticianInDebugMode(DiagnosticianReportGenerator reportGenerator, OutputStream outputStream) throws Exception;

    /**
     * Determina quais diagnosticadores devem ser executados.
     * 
     * @return List - lista de diagnosticadores
     * @throws Exception - Qualquer erro decorrente da listagem dos diagnosticadores
     */
    List<? extends Diagnostician> getDiagnosticiansListOfSystem() throws Exception;

    /**
     * Determina quais diagnosticadores devem ser executados em modo debug.
     * 
     * @return List - lista de diagnosticadores
     * @throws Exception - Qualquer erro decorrente da listagem dos diagnosticadores
     */
    List<? extends Diagnostician> getDiagnosticiansListOfSystemInDebugMode() throws Exception;
}